﻿namespace BlogsAPI
{
    using System;

        /// <summary>
        /// Какое дополнительное значение 
        /// </summary>
    [Serializable]
    public class PostAttribute
    {
        /// <summary>
        /// Имя аттрибута блога
        /// </summary>
        public string sName;

        /// <summary>
        /// Значение параметра блога
        /// </summary>
        public object sValue;

        /// <summary>
        /// Описание поля, нужно в некоторых случаях =(
        /// Например со ссылками
        /// </summary>
        public string sDesc;

        /// <summary>
        /// поле доступно только хозяину дневника
        /// </summary>
        public bool bPrivate;

        /// <summary>
        /// Поле могут видет друзья блогера
        /// </summary>
        public bool bShared;

        /// <summary>
        /// Для сериализации
        /// </summary>
        public PostAttribute()
        {

        }

        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="name">имя атрибута</param>
        public PostAttribute(string name)
        {
            sName = name;
            sValue = null;
            sDesc = null;
        }

        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="name">имя атрибута</param>
        /// <param name="value">значиние атрибута</param>
        public PostAttribute(string name, object value)
        {
            sName = name;
            sValue = value;
            sDesc = null;
        }

        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="name">имя атрибута</param>
        /// <param name="value">значиние атрибута</param>
        public PostAttribute(PostParams name, object value)
        {
            sName = name.ToString();
            sValue = value;
            sDesc = null;
        }

        /// <summary>
        /// Конструктор
        /// </summary>
        /// <param name="name">имя атрибута</param>
        /// <param name="value">значиние атрибута</param>
        /// <param name="desc">описание расширенное</param>
        public PostAttribute(string name, object value, string desc)
        {
            sName = name;
            sValue = value;
            sDesc = desc;
        }

        #region Method Merge

        /// <summary>
        /// Слияние аттрибутов
        /// </summary>
        public bool MergeWith(PostAttribute ba)
        {
            bool found = false;
            if (String.Compare(sName, ba.sName, true) == 0)
            {
                found = true;//найдено, поэтому оставляем новое значение поля
                //однако выставляем старые уровни доступа
                if (String.IsNullOrEmpty(sDesc))
                    sDesc = ba.sDesc;
                bPrivate = ba.bPrivate;
                bShared = ba.bShared;
            }
            return found;
        }

        #endregion


        /// <summary>
        /// Составление строчки для отображения элемента
        /// </summary>
        /// <returns></returns>
        public string GetDisplay()
        {
            string ret;
            switch (sName)
            {
                case "link":
                    ret = "<a target='_blank' href='" + sValue + "'>" +
                        (String.IsNullOrEmpty(sDesc) ? sValue : sDesc) + "</a>";
                    break;
                case "img":
                    ret = "<img src='" + sValue + "' border='0' alt='" + sDesc + "'>";
                    break;
                default:
                    ret = sValue + "&nbsp;&nbsp;" + sDesc;
                    break;
            }
            return ret;
        }
    }
}
